package com.ss.jdk.stream;

import com.ss.jdk.lambda.doman.Person;
import com.ss.jdk.lambda.doman.Person2;

import java.util.Map;
import java.util.stream.Stream;

/**
 * @Auther: ljy.s
 * @Date: 2022/9/10 - 09 - 10 - 20:53
 */
public class StreamTest19MapAndReduce {
    // 这是一个main方法，是程序的入口：
    public static void main(String[] args) {
        // 1.求出所有年龄的总和
        Integer sumAge = Stream.of(
                new Person2("张三", 18),
                new Person2("李四", 25),
                new Person2("赵武", 27),
                new Person2("张三", 16),
                new Person2("路遥", 35)
        )/*.map(p -> p.getAge()) // 实现数据类型的转换
                .reduce(0, (x, y) -> x + y);// 相加*/
                .map(Person2::getAge)
                .reduce(0, Integer::sum);
        System.out.println(sumAge);

        // 2.求出所有年龄中的最大值
        Integer maxAge = Stream.of(
                new Person2("张三", 18),
                new Person2("李四", 25),
                new Person2("赵武", 27),
                new Person2("张三", 16),
                new Person2("路遥", 35)
        ).map(Person2::getAge)// 实现数据类型的转换，符合reduce对数据的要求
                .reduce(0, Math::max);// reduce实现数据的处理
        System.out.println(maxAge);

        // 3.统计 字符 a 出现的次数
        Integer count = Stream.of("a", "b", "c", "d", "a", "c", "d")
                .map(ch -> "a".equals(ch) ? 1 : 0)
                .reduce(0, Integer::sum);
        System.out.println(count);
    }
}
